/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * CreationProduit.java
 *
 * Created on 6 janv. 2009, 03:10:45
 */

package fr.miage.shopping.presentation;

import java.awt.event.ActionEvent;
import java.io.FileNotFoundException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JComboBox;
import fr.miage.shopping.dao.traitements.CategorieDao;
import fr.miage.shopping.metier.entite.Categorie;
import fr.miage.shopping.metier.entite.Produit;
import fr.miage.shopping.metier.impl.CategorieBusinessServiceImpl;
import fr.miage.shopping.metier.impl.ProduitBusinessServiceImpl;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
 *
 * @author Cédric
 */
public class CreationProduit extends javax.swing.JFrame implements ActionListener{

    private JComboBox categories;
    private JLabel lNomProduit=new JLabel("Nom du produit");
    private JTextField tNomProduit=new JTextField(20);
    private JLabel lDescriptionProduit=new JLabel("Description du produit");
    private JTextField tDescriptionProduit=new JTextField(20);
    private JLabel lIdCategorie=new JLabel("Categorie");
    private JLabel lStockProduit=new JLabel("Nombre de produits en stock");
    private JTextField tStockProduit=new JTextField(5);
    private JLabel lPrixProduit=new JLabel("Prix du produit");
    private JTextField tPrixProduit=new JTextField(5);
    private JButton bAnnuler=new JButton("Annuler");
    private JButton bOK=new JButton("OK");
    private JButton openFile = new JButton("Télécharger l'image");
    private JFileChooser file = new JFileChooser();


    /** Creates new form CreationProduit */
    public CreationProduit() {
        initFrame();

    }


    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    /**
     * Récupère un vecteur de catégories
     * @return
     */
    public Vector<String> getCategories(){
        List<Categorie> list= CategorieDao.selectAllCategorieTrie();//CategorieDao.selectAllCategorie();
        Vector<String> categoriesVector=new Vector<String>();
        categoriesVector.add("");
        for(int i = 0;i<list.size();i++){
            categoriesVector.add(list.get(i).getNomCate());
        }
        return categoriesVector;
    }
    public void initFrame(){

		openFile.addActionListener(this);
		openFile.setActionCommand("chargerFichier");

        categories=new JComboBox(getCategories());
        Container pane = this.getContentPane();
        
        JPanel panelNorth=new JPanel();
        panelNorth.setLayout(new FlowLayout());
        panelNorth.add(lNomProduit);
        panelNorth.add(tNomProduit);
        panelNorth.add(openFile);
        
        pane.add(panelNorth,BorderLayout.NORTH);


        JPanel panelCenter=new JPanel();
        panelCenter.setLayout(new FlowLayout());
        panelCenter.add(lDescriptionProduit);
        panelCenter.add(tDescriptionProduit);
        pane.add(panelCenter,BorderLayout.CENTER);

        JPanel panelWest=new JPanel();
        panelWest.setLayout(new FlowLayout());
        panelWest.add(lStockProduit);
        panelWest.add(tStockProduit);
        pane.add(panelWest,BorderLayout.WEST);

        JPanel panelEast=new JPanel();
        panelEast.setLayout(new FlowLayout());
        panelEast.add(lPrixProduit);
        panelEast.add(tPrixProduit);
        panelEast.add(lIdCategorie);
        categories=new JComboBox(getCategories());
        panelEast.add(categories);
        pane.add(panelEast,BorderLayout.EAST);

        JPanel panelSouth=new JPanel();
        panelSouth.setLayout(new FlowLayout());
        this.bOK.addActionListener(this);
        this.bOK.setActionCommand("ok");
        panelSouth.add(bOK);
        this.bAnnuler.addActionListener(this);
        this.bAnnuler.setActionCommand("annuler");
        panelSouth.add(bAnnuler);

        pane.add(panelSouth,BorderLayout.SOUTH);

        this.pack();
        this.setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("chargerFichier")){
				file.showOpenDialog(this);
				
        }
        else if (e.getActionCommand().equals("annuler")) {

            JOptionPane.showMessageDialog(null,"Vous avez decidez de ne pas creer de produit !","Annulation creation produit",JOptionPane.WARNING_MESSAGE);
            this.setVisible(false);
        }else if (e.getActionCommand().equals("ok")) {
            
            if (erreurForm()){
                ProduitBusinessServiceImpl bs = new ProduitBusinessServiceImpl();
                CategorieBusinessServiceImpl bc= new CategorieBusinessServiceImpl();
      /*          List<Categorie> listeCate = bc.getAllCategorie();
                for (int i=0;i<listeCate.size();i++){
                    if()
                }*/
                Categorie cat=new Categorie();
                List<Categorie> laListe = new ArrayList<Categorie>();
                Produit prod=new Produit();
                laListe=CategorieDao.selectAllCategorie();
                String nomCat= categories.getSelectedItem().toString();
                for (int i = 0; i < laListe.size(); i++) {

                    String nom_cat_match=laListe.get(i).getNomCate();
                    if (nom_cat_match.equalsIgnoreCase(nomCat)){
                         cat=laListe.get(i);
                    }
                   
                }
                prod.setCategorie(cat);
                prod.setNomProd(tNomProduit.getText());
                prod.setDescription(tDescriptionProduit.getText());
                prod.setStockPhysique(Integer.parseInt(tStockProduit.getText()));
                prod.setPrix(Double.valueOf(tPrixProduit.getText()));
                InputStream in = null;
                try {
                    in = new FileInputStream(file.getSelectedFile());
                } catch (FileNotFoundException ex) {
                    Logger.getLogger(CreationProduit.class.getName()).log(Level.SEVERE, null, ex);
                }
                   if(in !=null){
                    try {
                        File dst = new File("C:/projet/image/" + tNomProduit.getText() + ".jpg");
                        dst.createNewFile();
                        OutputStream out = new FileOutputStream(dst);
                        byte[] buf = new byte[1024];
                        int len;
                        while ((len = in.read(buf)) > 0) {
                            out.write(buf, 0, len);
                        }
                        // Fermeture des flux
                        in.close();
                        out.close();
                    } catch (IOException ex) {
                        Logger.getLogger(CreationProduit.class.getName()).log(Level.SEVERE, null, ex);
                    }
                   }


                       
                bs.createProduit(prod);

                this.setVisible(false);
                JOptionPane.showMessageDialog(null,"Produit enregistré","Enregistrement effectué",JOptionPane.INFORMATION_MESSAGE);
            }

        }
    }

    private boolean erreurForm() {
        boolean noError = true;
        String msgErreur = "Le(s) champ(s) suivant(s) est/sont incorrectes :\n";
        if ((tNomProduit.getText() == null) || (tNomProduit.getText().length()<1)){
            msgErreur+=" - Nom du produit\n";
            noError = false;
        }

        if ((tDescriptionProduit.getText() == null) || (tDescriptionProduit.getText().length()<1)){
            msgErreur+=" - Description du produit\n";
            noError = false;
        }

         if ((tPrixProduit.getText() == null) || (tPrixProduit.getText().length()<1)){
             msgErreur+=" - Prix du produit\n";
            noError = false;
        }

         if ((tStockProduit.getText() == null) || (tStockProduit.getText().length()<1)){
            msgErreur+=" - Stock du produit\n";
            noError = false;
        }

        String nomCat=(String)categories.getSelectedItem();
        if ((nomCat== null) || (nomCat.length()<1)){
            msgErreur+=" - Element de la liste des catégories\n";
            noError = false;
        }
        
        
        if(!noError){
            JOptionPane.showMessageDialog(null,msgErreur,"Erreur de saisie",JOptionPane.WARNING_MESSAGE);
        }
        return noError;
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    // End of variables declaration//GEN-END:variables

}
